package com.solo.system.mapper;

import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.update.UpdateChain;
import com.solo.common.core.base.mapper.BasicMapper;
import com.solo.system.api.entity.SysNoticeUser;
import org.apache.ibatis.annotations.Mapper;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import static com.solo.system.api.entity.table.SysNoticeUserTableDef.SysNoticeUserTable;

/**
 * 通知公告用户关联 Mapper
 * @author 十一
 * @since 2024-12-04 14:28
 * 人生若只如初见，何事秋风悲画扇
 **/
@Mapper
public interface SysNoticeUserMapper extends BasicMapper<SysNoticeUser> {

    /**
     * 按通知id和用户id集合删除
     * @param noticeId 通知id
     * @param userIds 用户ID
     * @return int
     */
    default boolean deleteByNoticeIdAndUserIds(Long noticeId, Collection<Long> userIds) {
        return UpdateChain.of(this)
                .where(SysNoticeUserTable.NoticeId.eq(noticeId))
                .and(SysNoticeUserTable.UserId.in(userIds))
                .remove();
    }

    /**
     * 获取可查看指定通知公告的用户id集合
     * @param noticeId 通知id
     * @return {@link Set }<{@link Long }>
     */
    default List<Long> selectUserIdsByNoticeId(Long noticeId) {
        return QueryChain.of(this)
                .select(SysNoticeUserTable.UserId)
                .where(SysNoticeUserTable.NoticeId.eq(noticeId))
                .listAs(Long.class);
    }

}
